Nested cross-validation

중첩 교차 검증(nested cross-validation)
그리드 서치와 k-겹 교차 검증을 함께 사용하면 모신 러닝 모델의 성능을 세부 튜닝하기에 좋다.
바깥쪽 k-겹 교차 검증 루프가 데이터를 훈련 폴드와 테스트 폴드로 나누고
안쪽 루프가 훈련 폴드에서 k-겹 교차 검증을 수행하는 모델을 선택한다.
모델이 선택되면 테스트 폴드를 사용하여 모델 성능을 평가한다.

계산 성능이 중요한 대용량 데이터셋에서 유용하다.

전처리 과정이 복잡하면 계산 시간이 오래 걸릴 수 있다.
Pipeline 클래스와 make_pipeline 함수의 memory 매개변수에 캐싱 디렉터리를 지정하면,
전처리 결과를 로컬 디스크에 저장한 후 재사용 한다.

from sklearn.model_selection import corss_val_score
gs=GridSearchCV(estimator=pipe_svc, param_grid=param_grid, scoring='accuracy', cv=2)
scores=cross_val_score(gs, X_train, y_train, scoring='accuracy', cv=5)
print('CV : %.3f +/- %.3f' %(np.mean(scores), np.std(scores)))

CV 정확도: 0.974 +/- 0.015

from sklearn.tree import DecisionTreeClassifier
gs=GridSearchCV(estimator=DecisionTreeClassifier(random_state=0), param_grid=[{'max_depth':[1, 2, 3, 4, 5, 6, 7, None]}], scoring='accuracy', cv=2)
scores=cross_val_score(gs, X_train, y_train, scoring='accuracy', cv=5)
print('CV : %.3f +/- %.3f' %(np.mean(scores), np.std(scores)))

CV 정확도: 0.934 +/- 0.016

SVM 모델의 중첩 교차 검증 성능(97.4%)은 결정 트리의 성능(93.4%)보다 훨씬 뛰어나다.